import Cookie from 'js-cookie'

export default {
    state: {
        isCollapse: false,//控制菜单的开关
        // 面包屑
        tabsList: [
            {
                path: "/",
                name: "home",
                label: "首页",
                icon: "s-home",
                url: "Home/Home",
            },
        ],
        menu: []
    },
    mutations: {
        // 菜单开关
        COLLAPSEMENU(state) {
            state.isCollapse = !state.isCollapse
        },
        // 更新面包屑数据
        SELECTMENU(state, val) {
            // 判断添加的数据是不是首页,如果是首页就不再添加面包屑
            if (val.name !== 'home') {
                // 动态添加面包屑,没有的加上,有的就不加
                const index = state.tabsList.findIndex(item => item.name == val.name)
                if (index == -1) {
                    state.tabsList.push(val)
                }
            }
        },
        // 点击tag标签x号的事件
        CLOSETAG(state, item) {
            // 删除指定的tag数据
            const index = state.tabsList.findIndex(val => val.name == item.name)
            state.tabsList.splice(index, 1)
        },
        // 设置菜单的数据
        SETMENU(state, val) {
            state.menu = val
            Cookie.set('menu', JSON.stringify(val))
        },
        // 动态注册路由
        ADDMENU(state, router) {
            // 判断缓存中有没有菜单数据
            if (!Cookie.get('menu')) return
            const menu = JSON.parse(Cookie.get('menu'))
            state.munu = menu
            // 动态添加路由数据
            const menuArray = []
            menu.forEach(item => {
                if (item.children) {
                    item.children = item.children.map((item) => {
                        item.component = () => import(`../views/${item.url}`)
                        return item
                    })
                    menuArray.push(...item.children)
                } else {
                    item.component = () => import(`../views/${item.url}`)
                    menuArray.push(item)
                }
            });
            console.log(menuArray, '菜单列表(包含路由配置)');
            // 添加路由, 注意这里要给两个参数, 第一个参数是添加到哪个主路由,这里是给name为main的路由添加子路由
            menuArray.forEach(item => {
                router.addRoute('main', item)
            })
        }
    }
}